package util.queue;

import util.linkedList.impl.SingleLinkedList;

/**
 * @author Huzz
 * @created 2021-10-15 9:44
 * @param <T>
 */
public class LinkedQueue<T> {

    private SingleLinkedList<T> linkedList;

    private int size;

    public LinkedQueue() {
        linkedList = new SingleLinkedList<T>();
        size = 0;
    }

    /**
     * 入队
     *
     * @param data
     */
    public void add(T data) {
        linkedList.append(data);
        size++;
    }

    /**
     * 长度
     *
     * @return
     */
    public int size() {
        return this.size;
    }

    /**
     * 出队
     *
     * @return
     */
    public T pop() {
        T result = linkedList.getFirst();
        linkedList.del(0);
        size--;
        return result;
    }

    /**
     * 取队首元素
     */
    public T getFirst(){
        return linkedList.getFirst();
    }

    /**
     * 删除队首元素
     */
    public void del() {
        linkedList.del(0);
        size--;
    }

    public boolean isEmpty() {
        return size == 0;
    }
}

